package xianchenglock;

/**
 * @功能
 * @创建时间 2019/12/18
 * 不要以字符串常量作为锁定对象
 * 在以下例子中，m1和m2锁定的是同一个对象
 * 这种情况下会发生比较诡异的现象，比如你用到了一个类库，类库代码锁定了字符串“Hello”，
 * 但是你读不到源码，所以你在自己代码中也锁定了“Hello”，这时候就有可能发生诡异的死锁阻塞
 * 因为你程序和你用的类库不经意使用了同一把锁
 */
public class F extends E{
    String s1 = "Hello";
    String s2 = "Hello";
    // 看上去锁定的是双包胎，其实所定的是内容，即双胞胎的相同类对象，即下面两个锁定的是同一个对象
    void m1(){
        synchronized (s1){

        }
    }
    void m2(){
        synchronized (s2){

        }
    }
    public void sum(int i){

    }
    public int sum(String j){
        return 1;
    }

    public static void main(String[] args) {
        E e = new F();
    }
}
